[AWS Technical Support Note]ต้องระบุ endpoint url ด้วย DNS name อะไร หากต้องการเข้าถึง S3 โดยใช้ CLI ผ่าน S3 interface endpoint
ปัญหาที่เกิดขึ้น
ฉันต้องการเข้าถึง HTTPS ไปยัง S3 ผ่าน S3 interface endpoint โดยใช้ AWS CLI
DNS Name ของ S3 interface endpoint :
*.vpce-1a2b3c4d-5e6f.s3.ap-northeast-1.vpce.amazonaws.com
เมื่อฉันใส่ bucket name แทน * ใน DNS Name และรันคำสั่งด้านล่างนี้และพบ error "SSL validation failed for ~"
$ aws s3 ls s3://my-bucket-20230313/ --endpoint-url https://my-bucket-20230313.vpce-1a2b3c4d-5e6f.s3.ap-northeast-1.vpce.amazonaws.com --region ap-northeast-1
SSL validation failed for https://vpce-1a2b3c4d-5e6f.s3.ap-northeast-1.vpce.amazonaws.com/ hostname 'vpce-1a2b3c4d-5e6f.s3.ap-northeast-1.vpce.amazonaws.com' doesn't match either of 's3.ap-northeast-1.amazonaws.com', 'bucket.vpce-1a2b3c4d-5e6f-ap-northeast-1d.s3.ap-northeast-1.vpce.amazonaws.com', '*.control.vpce-1a2b3c4d-5e6f-ap-northeast-1d.s3.ap-northeast-1.vpce.amazonaws.com', '*.bucket.vpce-1a2b3c4d-5e6f-ap-northeast-1c.s3.ap-northeast-1.vpce.amazonaws.com', '*.accesspoint.vpce-1a2b3c4d-5e6f-ap-northeast-1c.s3.ap-northeast-1.vpce.amazonaws.com', 'bucket.vpce-1a2b3c4d-5e6f.s3.ap-northeast-1.vpce.amazonaws.com', '*.bucket.vpce-1a2b3c4d-5e6f.s3.ap-northeast-1.vpce.amazonaws.com', '*.control.vpce-1a2b3c4d-5e6f.s3.ap-northeast-1.vpce.amazonaws.com', '*.accesspoint.vpce-1a2b3c4d-5e6f-ap-northeast-1a.s3.ap-northeast-1.vpce.amazonaws.com', '*.s3.ap-northeast-1.amazonaws.com', '*.bucket.vpce-1a2b3c4d-5e6f-ap-northeast-1d.s3.ap-northeast-1.vpce.amazonaws.com', 'bucket.vpce-1a2b3c4d-5e6f-ap-northeast-1c.s3.ap-northeast-1.vpce.amazonaws.com', '*.accesspoint.vpce-1a2b3c4d-5e6f-ap-northeast-1d.s3.ap-northeast-1.vpce.amazonaws.com', '*.bucket.vpce-1a2b3c4d-5e6f-ap-northeast-1a.s3.ap-northeast-1.vpce.amazonaws.com', '*.control.vpce-1a2b3c4d-5e6f-ap-northeast-1c.s3.ap-northeast-1.vpce.amazonaws.com', '*.accesspoint.vpce-1a2b3c4d-5e6f.s3.ap-northeast-1.vpce.amazonaws.com', '*.s3-accesspoint.ap-northeast-1.amazonaws.com', '*.s3-control.ap-northeast-1.amazonaws.com', 'bucket.vpce-1a2b3c4d-5e6f-ap-northeast-1a.s3.ap-northeast-1.vpce.amazonaws.com', '*.control.vpce-1a2b3c4d-5e6f-ap-northeast-1a.s3.ap-northeast-1.vpce.amazonaws.com'
จาก Error ที่ปรากฎ สันนิษฐานได้ว่ามีสาเหตุมาจากการตั้งค่า DNS Name ที่ไม่ถูกต้อง
ช่วยบอก DNS Name ที่ถูกต้องเพื่อตั้งค่าที่ option ของ endpoint-url
วิธีแก้ปัญหา
ห้ามใส่ bucket name แทนที่ * ใน DNS Name ของ S3 Interface Endpoint แต่ต้องใส่คำว่า bucket แทนไปเลย
Accessing buckets, access points, and Amazon S3 Control API operations from S3 interface endpoints(English)
The following image shows the VPC console Details tab, where you can find the DNS name of a VPC endpoint. In this example, the VPC endpoint ID (vpce-id) is vpce-0e25b8cdd720f900e and the DNS name is *.vpce-0e25b8cdd720f900e-argc85vg.s3.us-east-1.vpce.amazonaws.com.
When using the DNS name to access a resource, replace * with the appropriate value. The appropriate values to use in place of *
For example, to access a bucket, use a DNS name like this:
bucket.vpce-0e25b8cdd720f900e-argc85vg.s3.us-east-1.vpce.amazonaws.com
แปลไทย
รูปภาพต่อไปนี้แสดงแท็บ Details ของหน้าคอนโซล VPC ซึ่งคุณสามารถเช็ค DNS Name ของ VPC endpoint ได้ ในตัวอย่างนี้ VPC endpoint (vpce-id) คือ vpce-0e25b8cdd720f900e และ DNS Name คือ *.vpce-0e25b8cdd720f900e-argc85vg.s3.us-east-1.vpce.amazonaws.com
เมื่อจะใช้ DNS Name ในการเข้าถึง resource ให้แทนที่ * ด้วย value ที่เหมาะสม
ตัวอย่างเช่น หากต้องการเข้าถึง bucket ให้ใช้ DNS Name ดังนี้:
bucket.vpce-0e25b8cdd720f900e-argc85vg.s3.us-east-1.vpce.amazonaws.com
หลังจากตั้งค่า DNS Name ที่ถูกต้องใน option ของ endpoint-url ได้ผลลัพธ์ดังนี้
$ aws s3 ls s3://my-bucket-20230313/ --endpoint-url https://bucket.vpce-1a2b3c4d-5e6f.s3.ap-northeast-1.vpce.amazonaws.com --region ap-northeast-1
2023-03-13 00:00:00 0 test.txt
บทความอ้างอิง
AWS PrivateLink for Amazon S3(English)
Amazon S3 คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS(Thai)
การลบไฟล์อัตโนมัติด้วย S3(Thai)
บทความต้นฉบับ
AWS CLI から S3 インターフェイスエンドポイント経由で S3 に HTTPS アクセスする際、endpoint-url オプションに設定する正しい DNS 名を教えてください(Japanese)